'''使用turtle库绘制一个颜色图谱。'''
import turtle as t
'''
本程序需要较大内存支持
'''
#初始化
t.penup()
t.pensize(1)
x,y = -750,-256
t.goto(x,y)
t.seth(90)
t.Turtle().screen.delay(0)
t.pendown()

#定义将RGB转换为rgb的函数
def RGB2rgb(tp1):
    R,G,B = tp1[0],tp1[1],tp1[2]
    r,g,b = R/255,G/255,B/255
    tp2 = (r,g,b)
    return(tp2)

#定义绘制色块的函数
def paintblock(ls1,ls2):
    #获取列表所含参数
    r1,g1,b1 = ls1[0],ls1[1],ls1[2]  #中间基准色
    r4,g4,b4 = ls2[0],ls2[1],ls2[2]  #列间渐变步长
    global  i
    for col in range(255):
        r2,g2,b2 = r1/255,g1/255,b1/255  #列内向黑色收敛的步长
        r3,g3,b3 = 1-r2,1-g2,1-b2  #列内向白色收敛的步长
        #每列都以黑色开始
        r,g,b = 0,0,0
        now_color = (r,g,b)
        t.color(RGB2rgb(now_color))
        #由黑色走向中间色
        for row in range(255):    
            t.fd(1) #绘制当前颜色像素点
            r,g,b = r+r2,g+g2,b+b2 #向中间色递变
            now_color = (r,g,b)
            t.color(RGB2rgb(now_color))  #获得列内新颜色
        t.fd(1)
        #由基准色走向白色
        for row in range(255):    
            t.fd(1) #绘制当前颜色像素点
            r,g,b = r+r3,g+g3,b+b3 #向白色收敛
            now_color = (r,g,b)
            t.color(RGB2rgb(now_color))  #获得列内新颜色
        t.fd(1)
        #及时报告进度
        print('已绘制第{}块{}列'.format(i//255+1,i%255))
        i += 1
        #准备下一列
        t.penup()
        t.seth(0)
        t.fd(1)
        t.seth(90)
        t.bk(512)
        t.pendown()
        r1,g1,b1 = r1+r4,g1+g4,b1+b4

i = 1
paintblock([255,0,0],[0,1,0])
paintblock([255,255,0],[-1,0,0])

paintblock([0,255,0],[0,0,1])
paintblock([0,255,255],[0,-1,0])

paintblock([0,0,255],[1,0,0])
paintblock([255,0,255],[0,0,-1])
